Xcode iOS ObjectiveC 下的 NSDateFormatter 日期時間

2015/10/07
~ 阿亮 ~

一般時間日期會用以下的程式碼來取得:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm"];
NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];

但,如果你的程式若有牽涉到用時間日期來做資料擷取、認證等問題時,就有些東西要注意了。

比如,就我的例子可能手機大都用台灣時間,加上伺服器也調成台灣時間的話,自己測試的話,就當然很順,但如果使用者手機設不是台灣時間呢?那時間就會對不起來了。

解決的方法就是手機在算時間日期時,加上 timeZone,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Taipei"]];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm"];
NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];

另外,可能一般會比較沒注意到,試著將「西曆」改設定成「日本曆」,這時 dateFormat 的 yyyy 會回傳 0027,而不是西元的 2015! 這代表在日本曆的「平成27年」。

解決的方法就是設定西曆 (NSGregorianCalendar),完整的日期時間取得的程式碼就是如下了。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Taipei"]];
[dateFormatter setCalendar: [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm"];
NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];

呼~會整死人的啊,在這之前,壓根不知外國人若設成其他非西曆者,根本不能用啊… >”<



站內搜尋



本站其他服務

本站其他軟體



  • 油價快訊App (OilPrices)

    依據油價及匯率,估算台灣下週油價,另外提供三週、一年以及三年的歷史變化,以及週末下午推播通知最新油價預估或公告。


  • 照片去背(PhotoEraser)

    一款方便移除背景的工具,產生透明背景圖可以存回原本相簿,也可分享到其他 App 使用.


  • 姓名筆畫吉凶查詢系統

    這是一個提供中文字康熙筆畫的小軟體,並根據農民曆計算每個名字或公司名的總筆畫以及最後的吉凶數,共有四種模式


  • 條碼掃描器(QRCode)

    支援 QRCode and Barcodes、可連續快速掃描、自動對焦、可打開手電筒供掃描時使用


  • 台灣匯率快算

    提供全球 150 種以上貨幣即時換算,以及各種匯率歷史變化圖。


  • 股海快訊 (iNews123)

    提供特定個股新聞更新推播、股價警示推播、新聞社群分享以及每日個股收盤價等功能的股票App/股市App.